// 手机号
const phoneReg = /^1[3-9]\d{9}$/;

// 电话
const telePhoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;

// 数字
const numberReg = /^\d+$|^\d+[.]?\d+$/;

// 密码
const passwordReg =
    /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/;

// 邮箱
const emailReg =
    /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;

// 车牌号
const licensePlateReg =
    /(^[\u4E00-\u9FA5]{1}[A-Z0-9]{6}$)|(^[A-Z]{2}[A-Z0-9]{2}[A-Z0-9\u4E00-\u9FA5]{1}[A-Z0-9]{4}$)|(^[\u4E00-\u9FA5]{1}[A-Z0-9]{5}[挂学警军港澳]{1}$)|(^[A-Z]{2}[0-9]{5}$)|(^(08|38){1}[A-Z0-9]{4}[A-Z0-9挂学警军港澳]{1}$)/;

/**
 * 单独验证    自己定义验证结果
 * @param value
 * import { validEmail } from '@/utils/rules'
 * const validateEmail = (rule, value, callback) => {
 *    if (!validEmail(value)) {
 *      callback(new Error('请输入正确格式的邮箱'))
 *    } else {
 *      callback()
 *    }
 *  }
 */

/**
 * 邮箱验证
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
    return emailReg.test(email);
}

/**
 * 手机号验证
 * @param {string} isPhone
 * @return {Boolean}
 */
export function validPhone(phone) {
    return phoneReg.test(phone);
}

/**
 * 电话座机验证
 * @param {string} telphone
 * @return {Boolean}
 */
export function validTelphone(telphone) {
    return telePhoneReg.test(telphone);
}

/**
 * 车牌号验证
 * @param {string} licensePlate
 */
export function validLicensePlate(licensePlate) {
    return licensePlateReg.test(licensePlate);
}

/**
 * From表单验证规则并返回验证结果  可用于公用的校验部分
 * @param {*} rule
 * @param {*} value
 * @param {*} callback
 * @returns
 * 使用：import { validatePhone } from '@/utils/rules'
 * Phone: [ { required: true, validator: validatePhone, trigger: "blur", }, ],
 */

// 手机号验证
export function validatePhone(rule, value, callback) {
    if (!value) {
        return callback(new Error("请输入手机号"));
    }
    if (!phoneReg.test(value)) {
        callback(new Error("请输入正确格式的手机号"));
    } else {
        callback();
    }
}

// 数字验证
export function validateNumber(rule, value, callback) {
    if (value !== "") {
        if (!numberReg.test(value)) {
            callback(new Error("请输入数字"));
        } else {
            callback();
        }
    } else {
        callback();
    }
}

// 密码验证
export function validatePsd(rule, value, callback) {
    if (!value) {
        return callback(new Error("请输入密码"));
    }
    if (!passwordReg.test(value)) {
        callback(
            new Error(
                "请输入6-20位英文字母、数字或者符号（除空格），且字母、数字和标点符号至少包含两种"
            )
        );
    } else {
        callback();
    }
}

// 邮箱验证
export function validateEmail(rule, value, callback) {
    if (!value) {
        return callback(new Error(this.$t("请输入邮箱")));
    }
    if (!emailReg.test(value)) {
        callback(new Error(this.$t("请输入正确格式的邮箱")));
    } else {
        callback();
    }
}

// 电话验证
export function validatelePhone(rule, value, callback) {
    if (!value) {
        return callback(new Error("请输入电话号码"));
    }
    if (!telePhoneReg.test(value)) {
        callback(new Error(this.$t("请输入正确格式的电话号")));
    } else {
        callback();
    }
}

// 车牌号验证
export function validateLicensePlate(rule, value, callback) {
    if (!value) {
        return callback(new Error(this.$t("请输入车牌号")));
    }
    if (!licensePlateReg.test(value)) {
        callback(new Error(this.$t("请输入正确格式的车牌号")));
    } else {
        callback();
    }
}
